package br.com.sgi.bean;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import br.com.sgi.model.Funcao;
import br.com.sgi.model.Igreja;
import br.com.sgi.model.Membro;
import br.com.sgi.service.FuncaoService;
import br.com.sgi.service.IgrejaService;
import br.com.sgi.service.MembroService;
import br.com.sgi.util.Mensagem;

@Controller("membroCadastro")
@Scope("request")
public class MembroCadastroBean extends BaseView {


	private static final long serialVersionUID = -6157734882789029886L;
	
	@Autowired
	private IgrejaService igrejaService;
	
	@Autowired
	private FuncaoService funcaoService;
	
	@Autowired
	private MembroService membroService;
	
	private List<Igreja> listaIgreja;
	
	private List<Funcao> listaFuncao;
	
	private List<Funcao> listaFuncaoExerce;
	
	private List<Funcao> listaFuncaoPretendida;
	
	private Membro membro = new Membro();
	
	private String codigo;
	
	private Funcao funcaoExerce;
	
	private Funcao funcaoPretendida;
	
	private Funcao funcao;
	
	private int qtFuncaoExerce;
	
	private int qtFuncaoPretendida;
	

	public void salvar(){
		membroService.salvar(membro);
	}
	

	public Membro getMembro() {
		if(membro == null)
			membro =  new Membro();
		return membro;
	}

	/**
	 * adiciona funcao exercidas
	 * @param funcaoExerce
	 */
	public void adicioarFuncaoExerce(){
		if(listaFuncaoExerce == null)
			listaFuncaoExerce = new ArrayList<Funcao>();
		
		if(funcaoExerce != null){	
			if(!funcaoRepitida(listaFuncaoExerce,funcaoExerce)){
				listaFuncaoExerce.add(funcaoExerce);
				qtFuncaoExerce = listaFuncaoExerce.size();
			}else
				Mensagem.errorMsg("erro.MSG_02");
		}
		else
			Mensagem.errorMsg("erro.MSG_01");
	}
	
	/**
	 * Remover funcao exerce
	 */
	public void removerFuncaoExerce(){
		if(funcao != null){
			listaFuncaoExerce.remove(funcao);
			qtFuncaoExerce = listaFuncaoExerce.size();
		}
	}

	/**
	 * adiciona funcao pretendida
	 * @param funcaoExerce
	 */
	public void adicioarFuncaoPretendida(){
		if(listaFuncaoPretendida == null)
			listaFuncaoPretendida = new ArrayList<Funcao>();
		
		if(funcaoPretendida != null){
			if(!funcaoRepitida(listaFuncaoPretendida,funcaoPretendida)){
				listaFuncaoPretendida.add(funcaoPretendida);
				qtFuncaoPretendida = listaFuncaoPretendida.size();
			}else
				Mensagem.errorMsg("erro.MSG_02");
		}
		else
			Mensagem.errorMsg("erro.MSG_01");
	}
	
	/**
	 * verifica se a funcao ja foi adicionada
	 * @param funcoes
	 * @param funcaoAdicionar
	 * @return
	 */
	private boolean funcaoRepitida(List<Funcao> funcoes, Funcao funcaoAdicionar){
		boolean jaExiste = false;
		for(Funcao funcao: funcoes){
			if(funcao.getCoSeqFuncao().equals(funcaoAdicionar.getCoSeqFuncao())){
				jaExiste = true;
				break;
			}
		}
		return jaExiste;
	}
	
	/**
	 * Remover funcao pretendida
	 */
	public void removerFuncaoPretendida(){
		if(funcao != null ){
			listaFuncaoPretendida.remove(funcao);
			qtFuncaoPretendida = listaFuncaoPretendida.size();
		}
	}
	
	/**
	 * retorna a funcao 
	 * @param listFuncao
	 * @param idFuncao
	 * @return
	 */
	private Funcao obterFuncao(List<Funcao> listFuncao, Long idFuncao){
		Funcao funcaoEcontrada = null;
		for(Funcao funcao: listFuncao){
			if(funcao.getCoSeqFuncao().equals(idFuncao)){
				funcaoEcontrada = funcao;
				break;
			}
		}
		return funcaoEcontrada;
	}
	
	public List<Funcao> getListaFuncao() {
		if(listaFuncao == null){
			listaFuncao = funcaoService.findAll();
		}
		return listaFuncao;
	}


	public void setListaFuncao(List<Funcao> listaFuncao) {
		this.listaFuncao = listaFuncao;
	}


	public void setMembro(Membro membro) {
		this.membro = membro;
	}

	public String getCodigo() {
		return codigo;
	}

	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}

	public List<Igreja> getListaIgreja() {
//		if(listaIgreja == null)
//			listaIgreja = igrejaService.findAll();
		return listaIgreja;
	}

	public void setListaIgreja(List<Igreja> listaIgreja) {
		this.listaIgreja = listaIgreja;
	}


	public Funcao getFuncaoExerce() {
		return funcaoExerce;
	}


	public void setFuncaoExerce(Funcao funcaoExerce) {
		this.funcaoExerce = funcaoExerce;
	}


	public List<Funcao> getListaFuncaoExerce() {
		return listaFuncaoExerce;
	}


	public void setListaFuncaoExerce(List<Funcao> listaFuncaoExerce) {
		this.listaFuncaoExerce = listaFuncaoExerce;
	}


	public Funcao getFuncao() {
		return funcao;
	}


	public void setFuncao(Funcao funcao) {
		this.funcao = funcao;
	}


	public int getQtFuncaoExerce() {
		return qtFuncaoExerce;
	}


	public void setQtFuncaoExerce(int qtFuncaoExerce) {
		this.qtFuncaoExerce = qtFuncaoExerce;
	}


	public List<Funcao> getListaFuncaoPretendida() {
		return listaFuncaoPretendida;
	}


	public void setListaFuncaoPretendida(List<Funcao> listaFuncaoPretendida) {
		this.listaFuncaoPretendida = listaFuncaoPretendida;
	}


	public int getQtFuncaoPretendida() {
		return qtFuncaoPretendida;
	}


	public void setQtFuncaoPretendida(int qtFuncaoPretendida) {
		this.qtFuncaoPretendida = qtFuncaoPretendida;
	}


	public Funcao getFuncaoPretendida() {
		return funcaoPretendida;
	}


	public void setFuncaoPretendida(Funcao funcaoPretendida) {
		this.funcaoPretendida = funcaoPretendida;
	}
	

}
